package cn.joyfulmedia.common.result;

/**
 * 公用异常编码
 *
 * <p>
 *     该编码,会与 {@link ModuleResultCode} 结合为每个模块对应编码
 * </p>
 * eg, 比如用户编辑会有:用户昵称不能为空,用户ID不能为空
 * 会从{@link ModuleResultCode}取到user module code:1000000
 * ILLEGAL_ARGUMENT_EXCEPTION code 8000, 得到最后的异常信息为:(1008001, e.getMessage()); 其中e.getMessage()为
 * 自定义信息,
 * checkArgument(isNotBlank(uid), "用户ID不能为空");
 * checkArgument(isNotBlank(nickName), "用户昵称不能为空");
 * 具体可参考 {@link com.google.common.base.Preconditions}
 *
 * @author yujun
 * @create 2016-11-08 14:56
 */
public enum CommonResultCodeEnum implements ResultCodeInterface {

    SUCCESS(0,"成功"),
    /**
     * 通用异常 - 预定编码为8000开始
     */
    ILLEGAL_ARGUMENT_EXCEPTION(8001, "参数异常"),

    /**
     * 通用底层异常 - 预定编码为9000开始
     */
    SQL_EXCEPTION(9001, "数据库异常"),
    TIME_OUT_EXCEPTION(9002, "连接超时"),
    IO_EXCEPTION(9003, "IO异常"),
    PASSPORT_EXCEPTION(9004, "passport服务异常"),
    REDIS_EXCEPTION(9005, "redis服务异常"),
    HSF_EXCEPTION(9006, "HSF异常"),
    MQ_EXCEPTION(9007, "MQ服务异常"),
    RESULT_IS_NULL_ERROR(9008, "RPC调用返回为空"),
    RESULT_DATA_IS_NULL_ERROR(9009, "返回结果为空"),
    HSF_NOT_FOUND_SERVICE_EXCEPTION(9010, "HSF服务无法找到"),

    UNKNOW_EXCEPTION(9999, "未知底层异常");



    private int resultCode;
    private String message;

    CommonResultCodeEnum(int resultCode, String message) {
        this.resultCode = resultCode;
        this.message = message;
    }

    /**
     * {@link #resultCode}的getter方法。
     */
    public int getResultCode() {
        return resultCode;
    }

    /**
     * {@link #message}的getter方法。
     */
    public String getMessage() {
        return message;
    }
}
